﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using CimeaSoft.BE;
using System.Data;

namespace CimeaSoft.Repository
{
    public class MuestraRepository:MasterRepository,IMuestraRepository
    {
        public void addMuestra(Muestra muestra)
        {
            foreach (var item in muestra.Muestra_Cuenca)
            {
                //context.Entry(item.Cuenca).State = EntityState.Unchanged;
                context.Entry(item).State = EntityState.Added;
            }
            foreach (var item in muestra.Muestra_Hidrologia)
            {
                //context.Entry(item.Hidrologia).State = EntityState.Unchanged;
                context.Entry(item).State = EntityState.Added;
            }
            foreach (var item in muestra.Muestra_Tramo)
            {
                //context.Entry(item.Tramo).State = EntityState.Unchanged;
                context.Entry(item).State = EntityState.Added;
            }
            foreach (var item in muestra.Muestra_Lecho)
            {
                //context.Entry(item.Lecho).State = EntityState.Unchanged;
                context.Entry(item).State = EntityState.Added;
            }

            foreach (var item in muestra.Muestra_Cuenca2)
            {
                //context.Entry(item.Cuenca2).State = EntityState.Unchanged;
                context.Entry(item).State = EntityState.Added;
            }
            foreach (var item in muestra.Muestra_Hidrologia2)
            {
                //context.Entry(item.Hidrologia2).State = EntityState.Unchanged;
                context.Entry(item).State = EntityState.Added;
            }
            foreach (var item in muestra.Muestra_Tramo2)
            {
                //context.Entry(item.Tramo2).State = EntityState.Unchanged;
                context.Entry(item).State = EntityState.Added;
            }
            foreach (var item in muestra.Muestra_Lecho2)
            {
                //context.Entry(item.Lecho2).State = EntityState.Unchanged;
                context.Entry(item).State = EntityState.Added;
            }

            foreach (var item in muestra.Muestra_IncluRapidos)
            {
                //context.Entry(item.IncluRapido).State = EntityState.Unchanged;
                context.Entry(item).State = EntityState.Added;
            }
            foreach (var item in muestra.Muestra_FrecuRapidos)
            {
                //context.Entry(item.FrecuRapido).State = EntityState.Unchanged;
                context.Entry(item).State = EntityState.Added;
            }
            foreach (var item in muestra.Muestra_CompSubstrato)
            {
                //context.Entry(item.CompSubstrato).State = EntityState.Unchanged;
                context.Entry(item).State = EntityState.Added;
            }
            foreach (var item in muestra.Muestra_RegimVelocidad)
            {
                //context.Entry(item.RegimVelocidad).State = EntityState.Unchanged;
                context.Entry(item).State = EntityState.Added;
            }
            foreach (var item in muestra.Muestra_PorcCause)
            {
                //context.Entry(item.PorcCause).State = EntityState.Unchanged;
                context.Entry(item).State = EntityState.Added;
            }
            foreach (var item in muestra.Muestra_Elementos)
            {
                //context.Entry(item.Elemento).State = EntityState.Unchanged;
                context.Entry(item).State = EntityState.Added;
            }
            foreach (var item in muestra.Muestra_CobVegetacion)
            {
                //context.Entry(item.CobVegetacion).State = EntityState.Unchanged;
                context.Entry(item).State = EntityState.Added;
            }

            foreach (var item in muestra.Muestra_GradCubierta)
            {
                //context.Entry(item.GradCubierta).State = EntityState.Unchanged;
                context.Entry(item).State = EntityState.Added;
            }
            foreach (var item in muestra.Muestra_EstruCubierta)
            {
                //context.Entry(item.EstruCubierta).State = EntityState.Unchanged;
                context.Entry(item).State = EntityState.Added;
            }
            foreach (var item in muestra.Muestra_CalidCubierta)
            {
                //context.Entry(item.CalidCubierta).State = EntityState.Unchanged;
                context.Entry(item).State = EntityState.Added;
            }
            foreach (var item in muestra.Muestra_GradoNaturalidad)
            {
                //context.Entry(item.GradoNaturalidad).State = EntityState.Unchanged;
                context.Entry(item).State = EntityState.Added;
            }

            foreach (var item in muestra.Muestra_GradCubierta2)
            {
                //context.Entry(item.GradCubierta2).State = EntityState.Unchanged;
                context.Entry(item).State = EntityState.Added;
            }
            foreach (var item in muestra.Muestra_CalidCubierta2)
            {
                //context.Entry(item.CalidCubierta2).State = EntityState.Unchanged;
                context.Entry(item).State = EntityState.Added;
            }
            foreach (var item in muestra.Muestra_GradoNaturalidad2)
            {
                //context.Entry(item.GradoNaturalidad2).State = EntityState.Unchanged;
                context.Entry(item).State = EntityState.Added;
            }

            foreach (var item in muestra.Muestra_Abi)
            {
                //context.Entry(item.Abi).State = EntityState.Unchanged;
                context.Entry(item).State = EntityState.Added;
            }

            context.Muestras.Add(muestra);
            context.SaveChanges();
        }


        public List<Muestra> GetAllFromMuestra()
        {
            var query = from c in context.Muestras
                        select c;
            return query.ToList();
        }

        public List<Muestra> GetAllFromMuestraByCriterio(string criterio)
        {
            var query = from c in context.Muestras
                              select c;
            if (criterio != null && criterio != string.Empty && criterio != "")
            {
                query = from c in context.Muestras
                        where c.NumMuestra.Contains(criterio.ToUpper()) || c.Responsable.Contains(criterio.ToUpper()) || c.TipMuestra.Contains(criterio.ToUpper())
                        select c;
            }
            return query.ToList();
        }


        public void updateMuestra(Muestra muestra)
        {
            //obtenemos datos de la DB
            var muestraDB = (from c in context.Muestras
                             where c.Id.Equals(muestra.Id)
                             select c).SingleOrDefault();

            muestraDB.CantMuestra = muestra.CantMuestra;
            muestraDB.Fecha = muestra.Fecha;
            muestraDB.NumMuestra = muestra.NumMuestra;
            muestraDB.Responsable = muestra.Responsable;
            muestraDB.TipMuestra = muestra.TipMuestra;

            #region Editando muestra_abi
            foreach (var item in muestra.Muestra_Abi)
            {
                item.Muestra = null;
                item.Abi = null;
                if (item.Id.Equals(0))
                {
                    item.Muestra = muestraDB;
                    item.Abi = context.Abis.Find(item.IdAbi);
                    context.Entry(item).State = EntityState.Added;
                    muestraDB.Muestra_Abi.Add(item);
                }
                else
                {
                    context.Muestra_Abi.Attach(item);
                    context.Entry(item).State = EntityState.Modified;
                    item.Muestra = null;
                }
            }
            #endregion
        }
    }
}
